/***************************************************************************
创建者：　华磊
 开始时间：               : 2020.11.10
 copyright            : (C) 深圳市华友高科有限公司
 修改说明：（每次有修改就添加一条，带有 修改人，修改时间，修改描述）

 ***************************************************************************
 *   程序文件视窗测试用代理类
*                                                                         *
 ***************************************************************************/
#ifndef PROGRAMFILEDELEGATE_H
#define PROGRAMFILEDELEGATE_H

#include "programfiledelegate_global.h"
#include <QObject>
#include <QApplication>
#include "../programFileView/programfileview.h"
#include "../programFileView/newfileview.h"
#include "../CommunicateDelegate/globaldata.h"
#include "../FtpManage/ftpmanage.h"


class CommunicateNormalDelegate;

/**
 * @brief The ProgramFileDelegate class　程序文件视窗测试用代理类
 */
class PROGRAMFILEDELEGATESHARED_EXPORT ProgramFileDelegate : public QObject
{
    Q_OBJECT

public:
    ProgramFileDelegate(ProgramFileView *programFileViewIn,GlobalData *globalDataIn,
                        CommunicateNormalDelegate *communicateNormalDelegateIn,QObject *parent = 0);
    ~ProgramFileDelegate();

signals:
    /**
     * @brief msgBoxSignal                  通知 打开消息框
     */
    void msgBoxSignal(int type,QString title,QString text);

    /**
     * @brief openFileCommSignal            通知 通信 控制器打开文件名
     * @param fileName
     */
    void openFileCommSignal(QString fileName);
    /**
     * @brief openFileEditSignal            通知 programView 显示编辑文件
     */
    void openFileEditSignal();

    /**
     * @brief changeViewIDsignal               新建 或 打开文件成功后 跳转程序编辑页面
     * @param viewID
     */
    void changeViewIDsignal(int viewID);

    /**
     * @brief showPointInMap                在地图上绘制点位
     */
    void showPointInMap();

public slots:
    /**
     * @brief updateMountFileSlot           更新挂载文件夹列表
     */
    void updateMountFileSlot();

    /**
     * @brief newFileSlot                   新建文件槽函数
     * @param fileName                      文件名
     * @param fileList
     */
    void newFileSlot();

    /**
     * @brief openFileSlot                  打开文件槽函数
     * @param fleName                       要打开的文件名
     */
    void openFileSlot(QString fleName);

    /**
     * @brief deleteFileSlot                删除文件槽函数
     * @param fileName                      要删除的文件名
     */
    void deleteFileSlot(QString fileName);

    /**
     * @brief copyFileSlot                  复制文件槽函数
     * @param fileName                      要复制的文件名
     */
    void copyFileSlot(QString beforeName ,QString newName);

    /**
     * @brief defaultSettingSlot            缺省设定槽函数
     * @param fileName文件名
     */
    void defaultSettingSlot(QString fileName);

    /**
     * @brief saveFileSlot            保存文件槽函数
     * @param fileName文件名
     */
    void saveFileSlot();

    /**
     * @brief settingFilePropertySlot       文件属性设置槽函数
     * @param fileProperty文件属性结构体
     */
    void settingFilePropertySlot(ProgramFileView::FileProperty fileProperty);

    /**
     * @brief selectedFileChangedSlot       点击选择文件操作槽函数
     * @param fileName文件名
     * @param index文件路径
     */
    void selectedFileChangedSlot(QString fileName, const QModelIndex &index);

    /**
     * @brief changeLanguageSlot        更改语言响应槽函数
     * @param language
     */
    void changeLanguageSlot(int language);

    /**
     * @brief openNewFileCommunicationSignal    新建文件上传完成后打开文件
     * @param result
     * @param message
     */
    void openNewFileCommunicationSlot(bool result, const QString& message);


private:
    /**
     * @brief initView初始化ProgramFileView类成员变量
     */
    void initializeView();

    void initConnect();


private:
    /**
     * @brief programFileView ProgramFileView类指针对象
     */
    ProgramFileView *programFileView;

    GlobalData *globalData;

    CommunicateNormalDelegate *communicateNormalDelegate;

private:
    QTranslator translator;

    bool openNewFileFlag;

    QString tmpFileWholeName;
};

#endif // PROGRAMFILEDELEGATE_H
